package codec

type Codec interface {
	// 序列化
	Marshal(data interface{}) ([]byte, error)
	// 反序列化
	Unmarshal(data []byte, v interface{}) error
	// 返回一个字符串
	String() string
}

// -------------------------------- 工 厂 模 式 -------------------------------------------------------------------------
func NewCodec() Codec {
	return NewMsgpackCodec()
}

func NewMsgpackCodec() Codec {
	return MsgPackCodec{}
}

func NewJsonCodec() Codec {
	return JsonCodec{}
}

/*
######################################### 封 装 为 公 共 方 法 随 时 调 用 #######################################
*/
func Marshal(v interface{}) ([]byte, error) {
	return MsgpackMarshal(v)
}

func Unmarshal(d []byte, v interface{}) error {
	return MsgpackUnmarshal(d, v)
}

func String() string {
	return "default_codec"
}
